home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 1
/
Cream of the Crop 1.iso
/
PROGRAM
/
TP041992.ARJ
/
04-19-92.TPC
Wrap
Text File
|
1992-04-19
|
89KB
|
2,569 lines
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 01-01-00 00:00:00
From
To
Subject
--- WM v2.01/92-0100
* Origin: A.C.E. of Spades (615)383-4381 The B.A.N. board (1:116/33)
* Tossed by SFToss v1.00b on 92/04/09 12:01:00
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-13-92 20:36:35
From Dj Murdoch
To Kenneth Otto
Subject Re: Borland Pascal 6.1?
KO> So, is Turbo Pascal 6.1 rumored to be on the way?
I haven't heard anything about TP 6.1, but Borland has said on Compuserve
that they plan to release a high end version of TP called "Borland Pascal"
sometime this year. It's supposed to support (include?) a DOS extender, so
you can write protected mode programs without Windows; if it's like Borland
C++, it'll also support Windows.
I've also seen somewhere that Borland plans eventually to produce an OS/2
version of TP, but probably not this year.
--- MajikToss v0.07m
* Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:3601/14.20)
* Tossed by SFToss v1.00b on 92/04/14 11:32:21
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-13-92 20:36:35
From Dj Murdoch
To Mike Copeland
Subject Re: Pascal, The Language
JM>Do assemblers have user-defined data types?
MC> Certainly! When you consider how Pascal implements
MC> user-defined data types (it maps the hardware-defined data
MC> to its data types), Assembler can do the same, and more...
More like "the same, and less". Most assemblers don't do type checking beyond
the size of the argument; that's a lot less useful than Pascal's strong type
checking.
--- MajikToss v0.07m
* Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:3601/14.20)
* Tossed by SFToss v1.00b on 92/04/14 11:32:21
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-13-92 20:36:36
From Dj Murdoch
To Steve Gabrilowitz
Subject Re: Delay Patch
SG> OK, but I still think a better solution is to write your
SG> own delay routine that is not dependant on the speed of the machine.
I think the point is that that is quite difficult. If you want it to run
accurately on anything from a 4.77 MHz PC to a 1000 Mhz 786, you'll need to
do some fancy programming.
--- MajikToss v0.07m
* Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:3601/14.20)
* Tossed by SFToss v1.00b on 92/04/14 11:32:21
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-13-92 20:36:36
From Dj Murdoch
To J J Marquez
Subject Re: Are You Listening... ?
JJ> Wanna know what my greatest fear is ? That C++ will add
JJ> it in first, causing me to have to learn C.... AAAaaaaaaiiiieeeeee!
I'm pretty sure that most numerical libraries for C++ add it in. There are
some advantages to being able to redefine operators.
--- MajikToss v0.07m
* Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:3601/14.20)
* Tossed by SFToss v1.00b on 92/04/14 11:32:21
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-13-92 20:37:00
From Trevor Carlsen
To Dale Frakes
Subject Variable # Parameters
DF> Does anyone out there know how to write a pascal (TP 6.0) function or
DF> procedure that accepts a variable number of parameters. I assume this
DF> is possible, since Write, Writeln, Read, Readln, Concat, etc all
DF> accept variable number of parameters, and they are written in Pascal.
DF> Has someone who has seen the source for the Run Time Libraries know
DF> how this is done? Again, I would assume that if someone can compile
DF> the RTL, it can be done within the Pascal environment.
Strictly speaking it cannot be done. The procedures you refer to that *appear*
to do that are actually changed by the compiler to effectively be *several*
procedures in the actual exe file.
You could however create a procedure that gives the effect of a variable number
of parameters by passing a single parameter which is a linked list. I've
never found that it is necessary to do this in the time I have been programming.
If you want to emulate the write/writeln/read/readln procedures at some time,
it is easy to set up a TFDD (text file device driver) to do so. The next
issue of PNL (#11) may have an article explaining this very useful technique.
TeeCee
--- MajikToss v0.07m
* Origin: The Pilbara's Pascal Centre (+61 91 732569) (1:3601/14.20)
* Tossed by SFToss v1.00b on 92/04/14 11:32:28
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-13-92 20:37:00
From Trevor Carlsen
To Frank Livaudais
Subject Text Files (1 Of 3)
FL> I want to read in text files bt make them binary so that you cant
FL> 'type' them from dos.
I think that the fastest and easiest way of doing this would be to use some
form of very simple encryption. Here is a program to encrypt or decrypt a
file - any file - using a simple password as your key and a key file that
you have on your system that is not subject to ever being altered. This approach
s being totally secure as it is almost a "one time pad" method.
It is tested as far as compilation is concerned and also briefly for valid
execution. It appears to work Ok.
{$A+,B-,D-,E+,F-,G+,I+,L-,N-,O-,R-,S-,V-,X+}
{$M 4048,0,131040}
program encrypt;
{ Author Trevor J Carlsen - released into the public domain 1992 }
{ PO Box 568 }
{ Port Hedland }
{ Western Australia 6721 }
{ Voice +61 91 73 2026 Data +61 91 73 2569 }
{ FidoNet 3:690/644 }
{ Syntax: encrypt /p=Password /k=Keyfile /f=File }
{ Example - }
{ encrypt /p=billbloggs /k=c:\command.com /f=p:\prog\anyfile.pas }
{ Password can be any alpha-numeric sequence of AT LEAST four }
{ characters. }
{ Keyfile is the full path of any file on the system that this }
{ program runs on. This file, preferably a large one, must not }
{ be subject to changes. This is critical as it is used as a }
{ pseudo "one time pad" style key and the slightest change will }
{ render decryption invalid. }
{ File is the full path of the file to be encrypted or decrypted.}
{ Notes: Running Encrypt a second time with exactly the same parameters }
{ decrypts an encrypted file. For total security the keyfile }
{ can be stored separately on a floppy. Without this keyfile or }
{ knowledge of its contents it is IMPOSSIBLE to decrypt the }
{ encrypted file. }
{ Parameters are case insensitive and may be in any order and }
{ may not contain any dos separator characters. }
const
BufferSize = 65520;
Renamed : boolean = false;
type
buffer_ = array[0..BufferSize - 1] of byte;
buffptr = ^buffer_;
str80 = string[80];
var
OldExitProc : pointer;
KeyFile,
OldFile,
NewFile : file;
KeyBuffer,
Buffer : buffptr;
KeyFileSize,
EncFileSize : longint;
Password,
KFName,
FFName : str80;
continued next message.
--- MajikToss v0.07m
* Origin: The Pilbara's Pascal Centre (+61 91 732569) (1:3601/14.20)
* Tossed by SFToss v1.00b on 92/04/14 11:32:28
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-13-92 20:37:03
From Trevor Carlsen
To Frank Livaudais
Subject Text Files (2 Of 3)
... continued from previous message
procedure Hash(p : pointer; numb : byte; var result: longint);
{ When originally called numb must be equal to sizeof }
{ whatever p is pointing at. If that is a string numb }
{ should be equal to length(the_string) and p should be }
{ ptr(seg(the_string),ofs(the_string)+1) }
var
temp,
w : longint;
x : byte;
begin
temp := longint(p^); RandSeed := temp;
for x := 0 to (numb - 4) do begin
w := random(maxint) * random(maxint) * random(maxint);
temp := ((temp shr random(16)) shl random(16)) +
w + MemL[seg(p^):ofs(p^)+x];
end;
result := result xor temp;
end; { Hash }
procedure NewExitProc; far;
{ Does the "housekeeping" necessary on program termination }
var code : integer;
begin
ExitProc := OldExitProc; { Reset exit procedure pointer to original }
case ExitCode of
0: writeln('Successfully encrypted or decrypted ',FFName);
1: begin
writeln('This program requires 3 parameters -');
writeln(' /pPassword');
writeln(' /kKeyFile (full path and name)');
write (' /fFile (The full path and name of the file');
writeln(' to be processed)');
writeln;
write ('These parameters can be in any order, are case,');
writeln(' insensitive, and may not contain any spaces.');
end;
2: writeln('Could not find key file');
3: writeln('Could not rename and/or open original file');
4: writeln('Could not create encrypted file');
5: writeln('I/O error during processing - could not complete');
6: writeln('Insufficient memory available');
7: begin
writeln('Key file is too small - aborted');
writeln;
writeln(' Key File must be at least as large as the buffer size ');
write (' or the size of the file to be encrypted, whatever is the');
writeln(' smaller.');
end;
8: writeln('Password must consist of at least 4 characters');
else { any other error }
writeln('Aborted with error ',ExitCode);
end; { case }
if Renamed and (ExitCode <> 0) then
writeln(#7'WARNING: Original file''s name is now TEMP.$$$');
{$I-}
close(KeyFile); Code := IOResult;
close(NewFile); Code := IOResult;
close(OldFile); Code := IOResult;
if ExitCode = 0 then
Erase(OldFile); Code := IOResult;
{$I+}
end; { NewExitProc }
function Str2UpCase(var S: string): string;
{ Converts a string S to upper case. Valid for English. }
var
x : byte;
begin
Str2UpCase[0] := S[0];
for x := 1 to length(S) do
Str2UpCase[x] := UpCase(S[x]);
end; { Str2UpCase }
continued in next message...
--- MajikToss v0.07m
* Origin: The Pilbara's Pascal Centre (+61 91 732569) (1:3601/14.20)
* Tossed by SFToss v1.00b on 92/04/14 11:32:28
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-13-92 20:37:03
From Trevor Carlsen
To Frank Livaudais
Subject Text Files (3 Of 3)
... continued from previous message
procedure Initialise;
var
CommandLine : string;
FPos,FLen,
KPos,KLen,
PPos,PLen : byte;
procedure AllocateMemory(var p: buffptr; size: longint);
begin
if size < BufferSize then begin
if MaxAvail < size then halt(6);
GetMem(p,size);
end
else begin
if MaxAvail < BufferSize then halt(6);
new(p);
end;
end; { AllocateMemory }
begin
FillChar(OldExitProc,404,0); { Initialise all global variables }
FillChar(Password,243,32);
ExitProc := @NewExitProc; { Set up new exit procedure }
if ParamCount <> 3 then halt(1);
CommandLine := string(ptr(PrefixSeg,$80)^)+' '; { Add trailing space }
CommandLine := Str2UpCase(CommandLine); { Convert to upper case }
PPos := pos('/P=',CommandLine); { Find password parameter }
KPos := pos('/K=',CommandLine); { Find keyfile parameter }
FPos := pos('/F=',CommandLine); { Find filename for encryption}
if (PPos = 0) or (KPos = 0) or (FPos = 0) then { Parameters wrong }
Halt(1);
FFName := copy(CommandLine,FPos+3,80);
FFName[0] := chr(pos(' ',FFName)-1); { Correct string length }
KFName := copy(CommandLine,KPos+3,80);
KFName[0] := chr(pos(' ',KFName)-1);
Password := copy(CommandLine,PPos+3,80);
Password[0] := chr(pos(' ',Password)-1);
if length(Password) < 4 then halt(8);
{ Create a random seed value based on the password }
Hash(ptr(seg(Password),ofs(Password)+1),length(Password),RandSeed);
assign(OldFile,FFName);
{$I-}
rename(OldFile,'TEMP.$$$'); { Rename the file to be encrypted }
if IOResult <> 0 then halt(3) else renamed := true;
assign(OldFile,'TEMP.$$$');
reset(OldFile,1);
if IOResult <> 0 then halt(3);
assign(NewFile,FFName);
rewrite(NewFile,1);
if IOResult <> 0 then halt(4);
assign(KeyFile,KFName);
reset(KeyFile,1);
if IOResult <> 0 then halt(2);
EncFileSize := FileSize(OldFile);
KeyFileSize := FileSize(KeyFile);
if KeyFileSize > EncFileSize then KeyFileSize := EncFileSize;
if IOResult <> 0 then halt(5);
{$I+}
if (KeyFileSize < BufferSize) and (KeyFileSize < EncFileSize) then
halt(7);
AllocateMemory(buffer,EncFileSize);
AllocateMemory(KeyBuffer,KeyFileSize);
end; { Initialise }
procedure Main;
var
BytesRead : word;
finished : boolean;
procedure CodeBuffer(number: word);
{ This is the actual encryption/decryption engine }
var x : word;
begin
for x := 0 to number - 1 do
buffer^[x] := buffer^[x] xor KeyBuffer^[x] xor Random(256);
end; { CodeBuffer }
begin
{$I-}
finished := false;
repeat
BlockRead(OldFile,buffer^,BufferSize,BytesRead);
if (FilePos(KeyFile) + BytesRead) > KeyFileSize then
seek(KeyFile,0);
BlockRead(KeyFile,KeyBuffer^,BytesRead,BytesRead);
CodeBuffer(BytesRead);
finished := BytesRead < BufferSize;
BlockWrite(NewFile,buffer^,BytesRead);
if IOResult <> then halt(5);
until finished;
{$I+}
end; { Main }
begin
Initialise;
Main;
end.
TeeCee
--- MajikToss v0.07m
* Origin: The Pilbara's Pascal Centre (+61 91 732569) (1:3601/14.20)
* Tossed by SFToss v1.00b on 92/04/14 11:32:28
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-13-92 20:37:17
From Terry Hughes
To Joshua Kersey @ 930/22
Subject Execswap
JK@9>I need help using ExecSwap, can anyone help me out? This
JK@9>little source does work, it executes it, but ARJ has no
JK@9>memory to work with at all, what's catching my shirttail
JK@9>here?
JK@9>In the ExecWSwp DOcs it says to use FreePtr^, but in TP,
JK@9>it's an "Unknown Identifier" and haven't stooped to buy
JK@P>TPRO yet...
FreePtr has nothing to do with TPRO. FreePtr is a system
variable used in the heap managment in versions 4 through 5.5 of
Turbo Pascal.
The EXECSWAP documentation explains three possible purposes for
LastToSave: 1) save no heap, 2) save all heap but free list and
3) save all heap and free list. The third condition is the one
that requires the expression you were trying to use:
Ptr(Seg(FreePtr^)+$1000, 0). Under Turbo Pascal 6.0, which you
apparently are using, this expression is no longer necessary
since the free list is stored within the heap itself. So, case 2
is no longer applicable and case 3 becomes simply "HeapPtr".
In case that wasn't clear, just pass HeapPtr for LastToSave and
all will be well:
if InitExecSwap(HeapPtr, 'EXECDEMO.$$$') then
...
-Terry
* OLX 2.2 * TurboPower Software (voice 719-260-6641)
--- MajikToss v0.07m
* Origin: The Programmers Playhouse (1:3601/14.20)
* Tossed by SFToss v1.00b on 92/04/14 11:32:31
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-13-92 20:37:20
From Terry Hughes
To Rob Kittredge
Subject C++ Products
RK> What was it that convinced you that TP was "better"
RK> than C++ in particular?
Just about everything. <g>
I can't compare the environments since I don't use either IDE.
To the languages themselves, TP is a much leaner/cleaner
language than C++. Bucking the trend here, I hope Borland keeps
TP simple and avoids the temptation to add all the myriad
features (gee gaws?) of C++ to TP. To me, TP's simplicity is
what makes it such a pleasure to work with and what can make a
TP programmer more productive than a C++ programmer.
Beyond that, the biggest issues were compilation capacity,
compilation speed, linking speed and ease of smart linking (in
C++, smart linking requires putting every smart-linkable
procedure in its own OBJ file). TP wins hands down in all of
those categories (although BC++ 3.0 caught up in compilation
capacity).
RK> P.S. did you happen to take a look at my mods to OPRO for
RK>TP's MAKEHELP to support those "+1" constants?
We decided not to merge those changes into the production
MAKEHELP since it's not a request we've ever heard before.
However, we've kept your version of MAKEHELP around should the
need ever arise. Thanks for sending it.
-Terry
* OLX 2.2 * TurboPower Software (voice 719-260-6641)
--- MajikToss v0.07m
* Origin: The Programmers Playhouse (1:3601/14.20)
* Tossed by SFToss v1.00b on 92/04/14 11:32:31
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-13-92 20:37:20
From Terry Hughes
To Joshua Kersey @ 930/22
Subject Re: Execute With Swap
JK@9>No, it wasn't posted, but the code's kinda long, I'll post
JK@9>it, if it's agreeable to Terry Hughes, it's part ASM and
JK@9>part Pascal..
It's OK by me (since it's PD code) but instead why don't I just
mention our BBS number here (719-260-9726). That way, Kevin can
come get it if he wants it and we'll avoid generating the
lengthy messages that the code would require.
-Terry
* OLX 2.2 * TurboPower Software (voice 719-260-6641)
--- MajikToss v0.07m
* Origin: The Programmers Playhouse (1:3601/14.20)
* Tossed by SFToss v1.00b on 92/04/14 11:32:31
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-13-92 20:37:20
From Terry Hughes
To Jud Mccranie
Subject B-tree Filer
JM>First, a slight misprint in the BTree manual, page 64, row 12,
JM>"NextKey" should be "BTNextKey".
Thanks. We'll fix that in the next printing.
JM>up for editing. Then if I press pageDown (for next record), I use
JM>the NextPrev proc, but the first (only) time I do that it always calls
JM>up the very first record with the matching key, which is not generally
JM>the previous record.
BTNextKey has two distinct behaviors. If the internal
"sequential pointer" is valid then BTNextKey ignores the passed
parameters and returns the next key in sequence. If the internal
sequential pointer is invalid then BTNextKey uses the passed
parameters to reposition the sequential pointer. Note that this
second behavior only occurs if the SearchForSequential option
has been turned on (as it is by default).
Based on your description, I would guess that
SearchForSequential is on and the internal sequential pointer
is invalid or was never set to begin with. A quick way to test
this theory would be to turn SearchForSequential off -- in that
case your call to NextPrevRecord should return 10255 when trying
to get the next record and 10265 when trying to get the previous
record.
You might want to look at the reference section for BTNextKey
for a more complete discussion of this issue.
-Terry
* OLX 2.2 * TurboPower Software (voice 719-260-6641)
--- MajikToss v0.07m
* Origin: The Programmers Playhouse (1:3601/14.20)
* Tossed by SFToss v1.00b on 92/04/14 11:32:32
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-13-92 20:37:20
From Terry Hughes
To David G. Edwards
Subject Why I Like Tp 5.5 Ide (c
DGE>In a message of <10 Mar 92 13:54:43>, Stephan Patterson (1:240/507.3)
writes
DGE> >Like it or not,
DGE> >SAA/CUA-compliant user interfaces are the way of the future. Most people
DGE> >prefer them, by far, to the older style interface a la OPRO.
DGE>I thought OPRO could be used to design SAA/CUA user-interfaces. Am I off?
You are correct. OPRO can be used to build CUA compliant
interfaces by virtue of its flexibility. And OPRO has had
specific support for dialog boxes (with list boxes, radio
buttons, check boxes, etc.) since version 1.03.
-Terry
* OLX 2.2 * TurboPower Software (voice 719-260-6641)
--- MajikToss v0.07m
* Origin: The Programmers Playhouse (1:3601/14.20)
* Tossed by SFToss v1.00b on 92/04/14 11:32:32
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-13-92 20:37:20
From Terry Hughes
To Dj Murdoch
Subject Re: Binary Tree Linked L
DM> > Actually B-Trees are more effecient than Binary tress and
DM> DF>
DM> DF> I thought the B in B-tree stood for Binary. What is the
DM> DF> difference between a b-tree and a binary tree? (Just a
DM> DF> basic explanation, I don't want source and such).
DM>B is for Balanced - to the extent possible, every node has
DM>the same number of subnodes. A binary tree can be so
DM>imbalanced as to be nearly a linked list, if new nodes are
DM>always added on the right, for instance.
In the circles that I travel (database toolbox vendors and
programmers) B-Tree is generally understood to mean Bayer-Tree
-- Bayer being one of the inventors of this particular
structure. It's different from a binary tree in that each node
contains pointers to many subnodes, rather than just left/right
subnodes and every node must be at least half-full. I believe a
Bayer-Tree implies balancing as well but I don't have my
reference here right now to check.
-Terry
* OLX 2.2 * TurboPower Software (voice 719-260-6641)
--- MajikToss v0.07m
* Origin: The Programmers Playhouse (1:3601/14.20)
* Tossed by SFToss v1.00b on 92/04/14 11:32:32
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-13-92 08:50:03
From Dj Murdoch
To Jud Mccranie
Subject Re: More features needed in TP
JM> You're probably right about the access time of pointing to the heap
JM> being about the same as allowing multiple segments, and that is one
JM> consideration. However, primarily the reason is for the programmer.
JM> I've used the method you suggest, and it is awfully dumb to have to do
JM> it to get more than 64K of data. It is bad programming style.
One might say that having 64K of global data is bad style in itself. What
sort of data is it?
--- Msg V3.2
* Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
* Tossed by SFToss v1.00b on 92/04/14 13:38:09
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-13-92 08:54:00
From Dj Murdoch
To Mike Copeland
Subject Re: testing records for equality
MC> Sure! Just as you can compare variables of the same
MC> type in Pascal, you can directly compare variables of the
MC> same user-defined (record) types - just try it, it'll
MC> work. (And a whole lot faster than the way you're doing it...)
MC> This is fundamental Pascal, which you should have
MC> learned in your 1st Pascal class, I'd have thought...
Did you try it? It doesn't work for me. If x and y are declared to be of
type myrec, a record type, I get
TEST.PAS(10): Error 41: Operand types do not match operator.
if x=y then
^
--- Msg V3.2
* Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
* Tossed by SFToss v1.00b on 92/04/14 13:38:09
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-13-92 08:55:50
From Dj Murdoch
To John Giesbrecht
Subject Re: Procedure start-up code
JG> LISTNETS.REPLACE: asm
JG> cs:023F 55 push bp
JG> cs:0240 89E5 mov bp,sp
JG> cs:0242 31C0 xor ax,ax
JG> cs:0244 9ADF045153 call 5351:04DF
JG> LISTNETS.124: push ds
JG> cs:0249 1E push ds
JG> ...
JG> The Replace procedure has no local variables, and is declared as:
JG> procedure replace(oldch, newch : char; var s : string); assembler;
JG> Now, according to p. 304 of the TP Programmer's Guide (as
JG> I understand it), the entry code should consist only of
JG> push bp, and mov bp, sp. So why is the FAR call there?
JG> And what does it do?
That's a call to the stack checking mechanism. You've compiled this code
with the $S+ option in effect; it sets AX to 0, to say that it needs to check
that there's enough stack space for a procedure/function with 0 bytes of locals
to safely execute. If the current value of the stack pointer shows you've
got less than 512 bytes of stack space, it'll abort your program.
--- Msg V3.2
* Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
* Tossed by SFToss v1.00b on 92/04/14 13:38:09
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-13-92 09:00:53
From Dj Murdoch
To David Solly
Subject Re: Help Needed with TP arrays
DS> You have hit upon one of the major differences between
DS> BASIC and (Standard) Pascal. In a nutshell: no you
DS> cannot redimension Pascal arrays on the fly like you can
DS> in BASIC. This seems to be a common characteristic of all
DS> compiled languages. I understand that BASIC compilers
DS> also place the same restriction on the programmer.
No, it's not a flaw of all compiled languages: MS Fortran allows dynamically
sized arrays. It's a flaw of Turbo Pascal.
There are various ways around it; they all involve allocating the array on
the heap. The one I prefer makes the array an object, so that all the allocatio
/deallocation is localized in its own code, but you don't need to do it that
way. They simplest way from the point of view of usage is something like this:
type
Tarray : array[1..32000] of integer; { Set the upper limit as large as
you'll ever need } var
p : ^Tarray;
size : integer;
begin
readln(size);
getmem(p,size*sizeof(integer)); { Now p is allocated only from 1..size }
p^[1] := 1; { set entry 1 }
p^[2] := 3; { set entry 2 }
{ and so on }
--- Msg V3.2
* Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
* Tossed by SFToss v1.00b on 92/04/14 13:38:09
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-13-92 09:08:47
From Dj Murdoch
To Jeff Sheets
Subject Fast video (was: thanks)
JS> Well it is working at a pixel write procedure taking
JS> approximately 3 KHz. My original purpose was to make it
JS> go at the speed of the screen and I don't understand how
JS> my 10 MHz computer is slowing the procedure down THAT
JS> slow. If you or anyone else knows just how I can speed
JS> this up WITHOUT external procedures or inline code(I'd
JS> rather use the Asm directive), I would appreciate it.
You'll have to show us some code before we could hope to speed it up. Generally
speaking though, writing a single pixel is going to be slow: you'll have
all that procedure call overhead every time. Try to write higher level graphics
routines (e.g. write a line, fill an area, etc.) as single procedures, and
you'll see a big improvement.
--- Msg V3.2
* Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
* Tossed by SFToss v1.00b on 92/04/14 13:38:09
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-13-92 09:12:22
From Dj Murdoch
To Ian Macmillan
Subject Re: turbo pascal/turbo pascal profession
IM> i am a beginner and just going out to get either turbo
IM> pascal or turbo pascal proffesional v6.0, and i need to
IM> know what one is the best to get for a geginner that will
IM> have everything in it when i am more familiar with it and
IM> more advance with pascall as well.
I'd recommend getting the basic package. The professional package contains
everything in it, plus:
- a compiler which can use extended memory to compile huge programs
- a debugger which lets you work on machine code. (The regular debugger
that comes in the standard package works on Pascal code only.)
- an assembler
- a few other related tools, like a .EXE file dumper.
Unless you want to work with assembler very soon, I'd say you don't need the
professional version. By the time you're ready for it, there should be a
new release of TP (version 6 is about 18 months old now), and you can always
upgrade to the professional version then, if you want.
You were asking about text versus graphics mode: both versions work in text
mode (they come with the same editor), but it is styled like a Windows program,
with borders on the windows, and is designed to be used with a mouse. If
the line-drawing characters don't cause trouble for you, then it would be
fine. If they do, you'll probably want to use your own editor and the command-l
ne version of the compiler.
You might want to write to Borland (I'll give the address below), and ask
if they have any special products for people with low vision. I don't know
if they do or not. Their address is:
Borland International Inc.
1800 Green Hills Road
P.O. Box 660001
Scotts Valley, CA 95067-0001
U.S.A.
--- Msg V3.2
* Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
* Tossed by SFToss v1.00b on 92/04/14 13:38:09
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-13-92 05:19:21
From Trevor Carlsen
To Jud Mccranie
Subject testing records for equality
JM> What is the best way to test 2 records (of the same type) to see
JM> if they are the same? Currently I'm using MOVE to copy each to an
JM> array of bytes and then do a byte by byte comparison. Is there a
JM> better way?
Although I question using the move procedure as it is unnecessary and time
consuming (see below), that is valid if there are no string types in any field.
If a string type exists then you need to test field by field. This caveat
can be dispensed with if when manipulating string fields, the field is fully
nulled out first. However time constraints can make this impractical on occasio
s.
Another trick is to include a word sized check sum field. Use that for the
comparison. If the same do a more thorough check. This method may be unaccepta
le due to the extra memory requirement.
Turbo Power's OPro and TPro have a function ( CompStruct ) in the TPStrings
unit that will do what you want but the string problem still exists and has
to be solved first.
Here is a better way to do your byte by byte comparison without the move procedu
e:
type
YourType = ...
ByteArray = array[1..65520] of byte;
PtrByteArray = ^ByteArray;
function Equal(var Struct1, Struct2; size: word): boolean;
var x : word;
s1,s2 : PtrByteArray;
done : boolean;
begin
done := false;
x := 1;
s1 := @Struct1;
s2 := @Struct2;
repeat
done := s1^[x] <> s2^[x];
inc(x);
until done or (x > size);
Equal := not done;
end; { Equal }
Untested.
TeeCee
--- TC-ED v2.01
* Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
* Tossed by SFToss v1.00b on 92/04/14 19:39:17
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-13-92 04:53:47
From Trevor Carlsen
To David Rye
Subject Time Zones
DR> (904) 659-2337 2200 - 0600 Eastern Standard ONLY please. I'll be
DR> going 24 hours in a few weeks, but for now make sure and check the
DR> time before you dial.
Although the person to whom you addressed this would probably have no problem
with this as he is in the USA, you should remember that about 50% of the
readers of this echo have very little idea what Eastern Standard is. In my
country we also have Eastern Standard and I can only guess that EST for you
is about GMT-4, whereas ours is GMT+10. (P-l-e-a-s-e everybody, don't rush
to enlighten me! I can easily check it out myself if I need the exact differenc
.) When talking time zones in an international echo such as this, it is better
to use Universal Time (or GMT as it is known in some places).
TeeCee
--- TC-ED v2.01
* Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
* Tossed by SFToss v1.00b on 92/04/14 19:39:17
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-13-92 05:05:50
From Trevor Carlsen
To Sujal Patel
Subject Turbo Pascal Bug?
SP> Is it Just me or is this a Bug in Pascal ?
It is just you!!! (See below)
SP> {$M 8192,0,0}
SP> Uses Dos;
SP> Begin
SP> {$I-}
SP> Mkdir ('\Temp');
SP> {$I+}
if IOResult = 0 then; {<<<<<<<<------ add this line }
SP> SwapVectors;
SP> Exec ('C:\Command.Com','');
SP> SwapVectors;
SP> Writeln (DosExitCode);
SP> End.
SP> When you Run this Program Segment and It Can
SP> Make \Temp, then the program runs fine, BUT IF
SP> \Temp ALREADY exists, I get a Runtime Error 5 (File Access Denied)
SP> On the Writeln (DosExitCode). I think that Pascal closed the
SP> Standard Output File.. Can anyone Help?
If an I/O error occurs when the I/O error checking is disabled, no further
I/O can occur until the IOResult function has been checked. If this is not
done the NEXT I/O attempt with I/O checking enabled will fail with the original
error number. This is explained on p81 of the TP6 Library reference.
TeeCee
--- TC-ED v2.01
* Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
* Tossed by SFToss v1.00b on 92/04/14 19:39:17
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-13-92 14:34:08
From Trevor Carlsen
To Sujal Patel
Subject Re: Vision BBS Source
SP> I don't Understand some people.. Why do You give the credit for a hack
SP> to another hack. LSD is derived from Forum-PC... This is an ancient
SP> BBS program and Ken Sallot has changed about 60% of the Forum-PC
SP> source.... If Ken Duda (The Author of Forum, I think) really wanted
SP> to, he could sue Ken Sallot for Copyright Infingement. Why Not Give
SP> Credit, were credit is due...
I didn't see the message you are replying to here but in any event you are
off-topic. Please restrict yourself to answering messages that are on-topic
in future.
Trevor Carlsen
Moderator.
--- TC-ED v2.01
* Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
* Tossed by SFToss v1.00b on 92/04/14 19:39:18
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-13-92 19:31:30
From Trevor Carlsen
To Bob Bannon
Subject Help Needed with TP arrays
BB> ... but I am stumped over TP5.5's treatment of arrays.
BB> Here's the question:
BB> Is there any way to "re-dimension" an array once the
BB> program has started running?
BB> Put another way: when I declare a variable as an array, TP
BB> seems rather insistent that the dimensions be a fixed
BB> constant. What I would like to do is allow the size of the
BB> array to be determined based on user input.
BB> Oh, one thing: my main purpose here is to have a more
BB> flexible set of matrix-handling procedures - something that
BB> will take what comes to it, and not waste memory with arrays
BB> that must be pre-defined as very large to accomodate
BB> whatever the user might ask for.
The only way this can be achieved in TP is by creating space for the array
on the heap. As you will only find out how big the array is at run-time,
this will necessitate you forgoing the ability to use range checking and thus
you will need to include code to ensure that your assignments are not out
of range. Here is the skeleton of how to go about creating a dynamic array
- (Note that no range checking code is shown).
{$R-}
type
DynamicArray = array[0..0] of byte; { except for the starting bound }
{ range is irrelevant. It is important in this case though that there }
{ only be a range of one element but this is only because of size }
{ calculations shown later. }
DAPtr = ^DynamicArray;
var
TheArray : DAPtr; { This is the pointer you use to access the array }
begin
GetArraySize;
{ Allocate the memory required on the heap }
GetMem(TheArray,ArraySize * sizeof(DynamicArray));
{ Initialize the array }
FillChar(TheArray^,ArraySize * sizeof(DynamicArray),0);
{ Start using the array }
TheArray^[100] := Whatever;
If you are unfamiliar with pointers, study the above carefully and read up
on them from a good text. Basically pointers are variables which contain
an address. You can get/set the value of the variable located at that address
by "dereferencing" the pointer. This is done by using the carat character
after the pointer's name. It is very important to:
(a) Initialise the pointer by a call to GetMem or New or by assigning it an
address value before attempting to use it
(b) Once it is initialised never forget to dereference it when using it.
There are many caveats associated with working without a "safety net" in this
way. If you are familiar with C you would be fairly comfortable. Coming
from a BASIC background may mean that you need to be very sure that you understa
d exactly how you are supposed to do something and more particularly why.
A mistake can have horrendous effects but the power gained from these technique
can also be impressive if used properly.
TeeCee
--- TC-ED v2.01
* Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
* Tossed by SFToss v1.00b on 92/04/14 19:39:18
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-13-92 15:15:49
From Trevor Carlsen
To Rune Fredriksen
Subject Floodfill
RF> I have written everything else for all the BGI functions, and the last
RF> thing i need is a floodfill, just to see how its done...
Why is the Graph unit's FloodFill procedure of no use to you?
TeeCee
--- TC-ED v2.01
* Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
* Tossed by SFToss v1.00b on 92/04/14 19:39:18
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-14-92 02:28:31
From Trevor Carlsen
To Mike Copeland
Subject testing records for equality
JM>What is the best way to test 2 records (of the same type) to see
JM>if they are the same? Currently I'm using MOVE to copy each to an
JM>array of bytes and then do a byte by byte comparison. Is there a
JM>better way?
MC> Sure! Just as you can compare variables of the same type in
MC> Pascal, you can directly compare variables of the same user-defined
MC> (record) types - just try it, it'll work. (And a whole lot faster
MC> than the way you're doing it...)
MC> This is fundamental Pascal, which you should have learned in your
MC> 1st Pascal class, I'd have thought...
Sorry Mike but IMHO you are wrong. That cannot be done in either TP *or*
standard Pascal.
eg
type
YourType = record
L : longint;
st: string;
end;
var
V1, V2 : YourType;
begin
if V1 = V2 then...
will not compile. Error 41: Operand types do not match operator.
This means that a test for equality between these types cannot be applied.
TeeCee
--- TC-ED v2.01
* Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
* Tossed by SFToss v1.00b on 92/04/14 19:39:19
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-14-92 01:34:38
From Trevor Carlsen
To Gerald Gutierrez
Subject Test
> dskjfdhjkghjkdshgdgkjdshgsdkjhgd
> dsgjkdshgkjdhg
> fdg
GG> A meaningful message may suffice as a test message, this is not a
GG> trash message area.
In future would you prefer that I copy you in on the netmail messages I send
to people doing this sort of thing? (That way you will know that I am doing
my job and not need to post replies like this.)
Any reply by NETMAIL only please...
Trevor Carlsen
Moderator.
--- TC-ED v2.01
* Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
* Tossed by SFToss v1.00b on 92/04/14 19:39:19
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-14-92 01:42:24
From Trevor Carlsen
To Ian Macmillan
Subject turbo pascal/turbo pascal professional
IM> i am a beginner and just going out to get either turbo pascal or turbo
IM> pascal proffesional v6.0, and i need to know what one is the best to
IM> get for a geginner that will have everything in it when i am more
IM> familiar with it and more advance with pascall as well.
IM> I am also legally blind with only two percent of good vision and i use
IM> a voice synthesizer to do anything on the computer. so, i would requir
IM> a version that is character base for now ...
Ian, I would recommend that you get the standard TP6 version. It should
take you at least 12 months or more before you would gain significant benefit
by having the professional version. Once you feel that you are at a competence
level commensurate with needing that version you can then get it. By then
it will be a new version and you will be able to take advantage of a partial
upgrade.
BTW - both are character based although the IDE (Integrated Development Environ
ent) is based on a GUI using text mode. Not knowing how your voice synthesizer
works, I can't advise you there. Perhaps you would do well to call Borland
direct.
TeeCee
--- TC-ED v2.01
* Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
* Tossed by SFToss v1.00b on 92/04/14 19:39:19
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-14-92 02:02:37
From Trevor Carlsen
To Matt Heck
Subject test
MH> I think we need an area called "Test" for these. Just "tests"
MH> and nothing else...
Matt you have previously been warned privately by netmail on off-topic messages.
This is a final public warning. Ignore off-topic messages and leave the
moderating to the moderator.
In future confine your messages to answering (or asking or discussing) Pascal
related topics only.
Trevor Carlsen
Moderator.
--- TC-ED v2.01
* Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
* Tossed by SFToss v1.00b on 92/04/14 19:39:19
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-14-92 02:13:56
From Trevor Carlsen
To Kevin O'Donnell
Subject READLN and READ not reading.
KO> function readtxt(x,y,fore,back:integer):string;
KO> var
KO> string_input : string;
KO> tempnum : integer;
KO> begin
KO> textcolor(fore);
KO> textbackground(back);
KO> gotoxy(x,y);
KO> read(string_input);
KO> readtxt := string_input;
KO> end;
KO> Now, in a program I am writing, I execute this func. twice in a row.
KO> The first one works fine and returns the proper string. The second
KO> time I execute it however, when it comes to 'read(string_input', TP
KO> will just skip right over it, and return a 0 length string.
KO> I have tried changing it to a READLN but it have no effect...
Works fine for me! What is probably happening is that you have a CR remaining
in the keyboard buffer. Clearing the buffer of any accumulated keystrokes
before your Readln may help. Do this by -
while KeyPressed do ReadKey;
This requires the {$X+} directive. If that is not desirable then -
while KeyPressed do while ReadKey = #0 do;
TeeCee
--- TC-ED v2.01
* Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
* Tossed by SFToss v1.00b on 92/04/14 19:39:19
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-14-92 02:31:54
From Trevor Carlsen
To Keven R. Pittsinger
Subject Reading C With Pascal
KR> ... I know there's some code out there to read C strings with TP
function Asc2Str(var CString; max: byte): string;
{ Converts an ASCIIZ string to a Turbo Pascal string }
{ with a maximum length of max. }
var st : array[1..255] of char absolute CString;
len : integer;
begin
len := pos(#0,st)-1; { Get the length }
if (len > max) or (len < 0) then { length exceeds maximum }
len := max; { so set to maximum }
Asc2Str := st;
Asc2Str[0] := chr(len); { Set length }
end; { Asc2Str }
TeeCee
--- TC-ED v2.01
* Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
* Tossed by SFToss v1.00b on 92/04/14 19:39:19
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-14-92 18:07:58
From Dj Murdoch
To David G. Edwards
Subject Pointers as function results (was: Power
>The solution I use for dynamic objects (I don't have any
> Complex code) is
>to keep a counter in each matrix record; every function decrements the
>counter, and when it reaches 0, disposes of the object. If you need to
>use an object twice, you increment the counter once before using it.
DG> If you allocate an object twice, how do you get the first
DG> address back into the pointer variable so it can be
DG> disposed? I must not understand the problem. If I do:
DG> new(p);
DG> new(p);
DG> Unless I save the value of the first p, how can I dispose
DG> it? And if I save it, why not use two pointer variables,
DG> p1 and p2, instead?
You're right, there's no way to dispose of the first p^. What I meant is
something like this: Suppose X and Y are pointers to matrix objects. If
I want to calculate Z as their product, and don't have any need for them any
more, then it's fine if MatMul disposes of them in
Z := MatMul(X,Y);
In fact, it's really handy, because it lets me calculate X Y Z as
W := MatMul(X, MatMul(Y,Z));
The problem comes up when I try to calculate something like X^2, because MatMul
would get in trouble trying to dispose of X twice in
Y := MatMul(X, X);
The solution I use is to keep a counter in every object, and to follow a rigid
discipline:
1. Newly created objects (function results) always have the counter set to
zero.
2. Every function which takes a pointer to one of these objects as an
argument is sure to "touch" the pointer, by passing it exactly once to
another function. (There's an exception below that lets you pass it more
than once if you need to.)
3. If a function doesn't need to pass the object to another function, then
it passes it to the special function "Touch()", to satisfy rule 2.
Touch checks the counter; if it's zero, it disposes of the object,
otherwise, it decrements it by one.
4. The way to get around the "exactly once" rule 2 is to call the "Protect"
function before you pass the object. This just increments the counter.
5. Functions should never change objects being passed to them as arguments;
there's a function called "Local" which makes a local copy to work on if
you need it. What Local does is to check the counter; if it's zero,
Local just returns the original object, otherwise it asks the object to
make a copy of itself.
For example, to do the line above safely, I'd code it as
Y := MatMul(X, Protect(X));
MatMul would look something like this:
Function MatMul(Y, Z : PMatrix): PMatrix;
var
result : PMatrix;
begin
{ Allocate result, fill in the values appropriately, then }
Touch(Y);
Touch(Z);
MatMul := result;
end;
The first Touch would just decrement the counter in X, and the second would
dispose of it (assuming it wasn't already protected before the creation of Y).
I've found that this system works really well, and I can sleep at night, knowing
that I never leave dangling pointers even though I'm doing lots of allocations
and deallocations.
Here, in case you're interested, is the real matrix multiplier:
Function MProd(x,y:PMatrix):PMatrix;
{ Calculate the matrix product of x and y }
var
result : PMatrix;
i,j,k : word;
mp : PFloat;
begin
if (x=nil) or (y=nil) or (x^.cols <> y^.rows) then
MProd := nil
else
begin
result := Matrix(x^.rows,y^.cols,nil,true);
if result <> nil then
with result^ do
begin
for i:=1 to rows do
with x^.r^[i]^ do
for j:=1 to cols do
begin
mp := pval(i,j);
mp^ := 0;
for k:=1 to x^.cols do
mp^ := mp^ + c[k]*y^.r^[k]^.c[j];
end;
end;
MProd := result;
Touch(x);
Touch(y);
end;
end;
As you can see, the memory allocation is a pretty minor part of it. The dynamic
indexing is really ugly (I'd like to use "y[k,j]", but I'm stuck using "y^.r^[k]
.c[j]"), but I haven't found any way around that.
--- Msg V3.2
* Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
* Tossed by SFToss v1.00b on 92/04/15 13:03:07
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-14-92 18:41:57
From Dj Murdoch
To Max Maischein
Subject Re: Powers / Memory under OS/2
MM> Under Windows, there is no memory limit, or am I wrong ??
I think you're wrong, at least about Win 3.0. In standard mode, the largest
allocatable block is 1Mb, and there are only about 4000 (8192 total, but the
system uses a lot) allocations available. That puts an absolute upper limit
of 8 Gb on Windows memory, but since most allocations are way smaller than
1Mb, in practice the limit is much lower. (In enhanced mode, the limit is
64Mb per allocation, but still, the 8192 allocations is the real bottleneck.)
I've read that Win 3.1 doubles the number of allocations allowed, but I don't
know if it changed the size limit.
--- Msg V3.2
* Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
* Tossed by SFToss v1.00b on 92/04/15 13:03:07
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-14-92 18:50:19
From Dj Murdoch
To Stephane Michaud
Subject Re: Procedures...
SM> Is it possible to start a procedure that calls a second wich
SM> call a third and then quit the third and the second without
SM> never finishing them?? It's hard to understand... Here's
SM> an example:
Yes, it's possible. Look for implementations of SetJump/LongJump (the C name
for this) or Catch/Throw (the LISP name). There's one in Turbo/Object Professio
al, for instance. The idea is that you have a function called SetJump, which
saves some state information in a record. Then LongJump restores the state
information and you return from SetJump *again*, but with a different return
value.
--- Msg V3.2
* Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
* Tossed by SFToss v1.00b on 92/04/15 13:03:07
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-14-92 18:55:42
From Dj Murdoch
To All
Subject Powers
I was glancing through Stroustrup's book on C++ the other day, and was reminded
of the call here for user definable operators like "**" for powers. He discusse
exactly this case, and said that in C++, you shouldn't define a new operator
for powers, you should use a pow() function.
(The reason: in C++, you can't define new operators, you can only redefine
old ones. Apparently there's no existing "**" operator, or any other operator
with the peculiar combining properties that "**" should have.)
I thought it was pretty funny. It makes me much happier with my opinion that
Turbo Pascal should *not* allow operators to be defined/redefined.
--- Msg V3.2
* Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
* Tossed by SFToss v1.00b on 92/04/15 13:03:07
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-15-92 02:16:50
From Trevor Carlsen
To Joy Mukherjee
Subject Encryption
JM> Actually, being an amateur hacker myself, the way a hacker breaks that
JM> type of thing is when its accessed, or unencrypted. Rarely does a
JM> hacker try to mess with just random byte strings. Therefore, when you
JM> unencrypt the string to print it out, the hacker will usually find the
JM> key, and then not have any problems.
That is valid if the key is relatively short and repeating, or is used to
create a pseudo random sequence. If the key is as long as the text being
encrypted and is not reused then decryption without knowing the key in advance
is impossible. The method is known as the "one time pad" and is universally
recognised as the only proveably unbreakable encyphering method known. Knowing
the encryption/decryption algorithm is of no help whatsoever.
The DOD's encryption standard is, as far as is known, also unbreakable but
this has not been proven mathematically.
JM> ... and in forever in your debt!
Forever is a long time! I'll be happy with a couple of weeks :-)
TeeCee
--- TC-ED v2.01
* Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
* Tossed by SFToss v1.00b on 92/04/15 20:24:53
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-15-92 02:33:09
From Trevor Carlsen
To Kevin O'Donnell
Subject TELIX *.FON File Problems
KO> Anyone know of a way to read in the TELIX fon file?
KO> I have the record format but I do not know how to get past the header
KO> in the file... Having the header there is messing up my reads to the
KO> file.
If you know the header size it is no problem. There are two ways of doing
what you want.
1. Write your own little seek procedure.
const
HeaderSize = 155; { or whatever }
procedure Seek(var f; rec: longint);
var OldSize: word;
begin
with FileRec(f) do begin
OldSize := RecSize;
RecSize := 1;
seek(file(f),rec * OldSize + HeaderSize);
RecSize := OldSize;
end;
end;
2. Use BlockRead/Write.
Method 1 is probably easiest if your code is already written as no code changes
would be necessary, unless you were also using seek on other files, in which
case call the above procedure something else.
TeeCee
--- TC-ED v2.01
* Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
* Tossed by SFToss v1.00b on 92/04/15 20:24:53
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-15-92 06:43:54
From Trevor Carlsen
To Andrew J. Mead
Subject Borland, OS/2 2.0, and you
AJ> ...It's beginning to look like my 80%/20% Pascal/C-C++ ratio may reverse
AJ> itself in the next year out of necessity instead of desire. I like C
AJ> and C++, but I prefer to program in Pascal, but unless the compilers
AJ> don't keep up, I'll have to go with C all the way. Hopefully Borland
AJ> will read this and the posts of others, and realize that the 2.1
AJ> million Turbo Pascal programmers are ready to spend their money...
If at the end I *have* to switch to C or C++ (heaven forbid) due to Borland
deserting their roots, I would not consider purchasing a Borland product
again! I know that it might be a case of cutting off my nose etc... but I'd
be damned if I would knowingly do anything to support them if they were to
do that.
Having got that off my chest, you don't honestly believe that Borland would
do that do you? It would be economic madness. One thing Borland can never
be accused of in the past is knowing where the dollars come from. I'd be
willing to bet big readies on an OS/2 version of TP before very long if the
operating system proves as successful as it appears it may become.
TeeCee
--- TC-ED v2.01
* Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
* Tossed by SFToss v1.00b on 92/04/15 20:24:54
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-15-92 08:22:30
From Trevor Carlsen
To Kevin O'Donnell
Subject TELIX *.FON File Problems
KO> Anyone know of a way to read in the TELIX fon file?
KO> I have the record format but I do not know how to get past the header
KO> in the file... Having the header there is messing up my reads to the
KO> file.
In my earlier message to you the seek routine I suggested has an important
stuff-up :-( - it calls itself, when in fact it should call System.Seek.
Here is a demo program that demonstrates its use... (I don't know what all
the fields of a *.fon file record are but have been able to quickly determine
the general structure for the purposes of this demo. Hope it helps.)
{$A+,B-,D-,E+,F-,I+,L-,N-,O-,R+,S+,V-,X+}
{$M 4096,0,0}
uses
crt,
dos;
const
HeaderSize = 64;
FonFile : PathStr = 'C:\COMM\TELIX\TELIX.FON';
type
fondir = record
BBSname : array[1..25] of char;
BBSnumber : array[1..17] of char;
Dummy1 : array[1..16] of byte;
LastDate : array[1..6] of char;
Dummy2 : array[1..8] of byte;
Password : array[1..14] of char;
end;
var
telix : file of fondir;
data : fondir;
x : word;
procedure seek(var f; rec: longint);
var OldSize: word;
begin
with FileRec(f) do begin
OldSize := RecSize;
RecSize := 1;
system.seek(file(f),HeaderSize + (rec * OldSize));
RecSize := OldSize;
end; { with }
end; { seek }
begin
assign(telix,FonFile);
reset(telix);
seek(telix,0);
clrscr;
write ('BBS Name Phone Number ');
writeln('Password Last Date');
write ('============================================');
writeln('=========================');
window(1,3,80,25); x := 0;
while not eof(telix) do begin
read(telix,data);
with data do
writeln(BBSname,BBSnumber,' ',Password,' ',LastDate);
inc(x);
if x mod 22 = 0 then ReadKey;
end; { while }
close(telix);
ReadKey;
end.
(Tested OK) :-)
TeeCee
--- TC-ED v2.01
* Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
* Tossed by SFToss v1.00b on 92/04/15 20:24:54
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-13-92 19:25:02
From Wilbert Van.leijen
To Bas van Gaalen
Subject CLOCK
** Quoting a message from Bas van Gaalen to ALL **
> Does anyone around here, has any idea how to put a clock somewhere
> in the screen? What I mean is ofcourse not just GETTIME, and then put
> the variables on the screen, but a interupt-driven clock!
Download STACK60.ZIP from 2:500/31 or 2:500/123.
Or check out TSRCLK2.ZIP -- same principle, but written in assembler
(occupies a mere 288 bytes in memory).
> Adiosnapioso,
Groetz,
Wilbert
--- Dutchie V2.91e
* Origin: Algorithms - Data Structures = Assembly Language (2:500/12.10956)
* Tossed by SFToss v1.00b on 92/04/17 07:45:53
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-13-92 19:29:45
From Wilbert Van.leijen
To Kyle Pritchett
Subject VGA
** Quoting a message from Kyle Pritchett to All **
> I am looking for a method (either a program or advise) to include a
> 320x200x256 .PCX or .GIF into my Pascal source.
I did it as follows: wrote a TSR that wakes up when Alt-ScrollLock is pressed;
when active in foreground, it simply dumps the contents of the VGA screen
buffer & all 256 DAC registers to two files. Works great; bypasses the need
to crack the .GIF file format.
How does one write a TSR, you might ask? Grab a copy of Ross Wentworth's TPPOP
package and you'll have the project completed within a few hours.
Regards,
Wilbert
--- Dutchie V2.91e
* Origin: Algorithms - Data Structures = Assembly Language (2:500/12.10956)
* Tossed by SFToss v1.00b on 92/04/17 07:45:53
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-13-92 19:57:55
From Wilbert Van.leijen
To Jud Mccranie
Subject testing records for equality
** Quoting a message from Jud Mccranie to All **
> What is the best way to test 2 records (of the same type) to see
> if they are the same? Currently I'm using MOVE to copy each to an
> array of bytes and then do a byte by byte comparison. Is there a
> better way?
Tip 1: Align your data on Word, Double Word, or any other power of 2
boundaries! This speeds up indexing tremendously.
Try for example:
For i := 1 to 10000 Do
SomeRec := SomeArrayOfRecord[i]
for values of SizeOf(SomeRec) = 7 and SizeOf(SomeRec) = 8.
If SizeOf(SomeRec) = 7, the record is indexed using the slow 'MUL'
instruction; in the latter case, the index register is shifted
left three bits, and that's mucho faster on most processors.
Tip 2: Consider Typecasting. Assume ValueA and ValueB to be of a type
whose SizeOf returns 8.
Type
Rec8Type = Array[0..1] of LongInt;
If (Rec8Type(ValueA)[0] = Rec8Type(ValueB)[0]) and
(Rec8Type(ValueA)[1] = Rec8Type(ValueB)[1]) Then
WriteLn('Equal!');
Using this technique, you can achive some more speed copying the records to
be compared to global variables; indexing of these is done at compile-time.
Somethimes you can accomplish the same with case-variant records, but often
type-casting is more convenient.
Regards,
Wilbert
--- Dutchie V2.91e
* Origin: Algorithms - Data Structures = Assembly Language (2:500/12.10956)
* Tossed by SFToss v1.00b on 92/04/17 07:45:53
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-15-92 17:49:02
From Dj Murdoch
To Dan Davies
Subject Re: Object-oriented programming
DD> I am currently researching object-oriented programming for a college
DD> course and would appreciate some feedback from active
DD> object-oriented programmers on the following questions:
DD> 1. What do you find to be the most significant advantages of OOP?
I use inheritance the most, I think. You might have read one of my messages
yesterday about how I handle dynamic allocation of matrices as function results;
the only reason this is reasonable is because the matrix objects can inherit
that function from the base object, I don't have to rewrite it for every differe
t type I deal with.
DD> 2. What are the most significant drawbacks?
By far the biggest drawback is that it's not at all standardized. There's
some slim hope of porting non-OOP TP code to other compilers; just about zero
hope for OOP code, though.
DD> 3. What aspects of OOP are hardest to learn?
Good design. Of course, that's the hardest part of anything to learn.
DD> 4. How long have you been using OOP?
I'd say about 2 years. I started before TP 6 came out, but have since rewritten
everything I did in those days.
--- Msg V3.2
* Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
* Tossed by SFToss v1.00b on 92/04/17 09:42:17
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-15-92 17:58:02
From Dj Murdoch
To Greg Smith
Subject Re: Powers / Memory Under Os/
GS> limit. Besides, the 386/486 processor memory limit is 4 Gigabytes.. Only
8 times more than the limit IBM set. I don't know if the 586 will change
GS> this.
That's only in flat 32 bit addressing mode. The 386 can have a 16 bit segment
as well as a 32 bit offset, for 48 bit addresses - 256 terabits, I think.
Not all of it can be physical memory, of course, but your program needn't
know the
GS> Anyone with TPW care to comment? I abhor Windows myself.
There's still the 64K/object limit, but you can have several thousand objects,
so the effective limit in TPW is something like 256 megabytes. In Windows
standard mode, this all has to be physical memory, but in enhanced mode, it
could be virtual memory on disk.
--- Msg V3.2
* Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
* Tossed by SFToss v1.00b on 92/04/17 09:42:17
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-15-92 18:05:10
From Dj Murdoch
To Ford Crews
Subject Re: 8087 disable
FC> Has anybody got a routine or progam to disable the math
FC> coprocessor. I would like to test how well programs run
FC> without a math coprocessor even though I have one Installed.
Just SET 87=N at the DOS command line before you run the program, and TP will
pretend there's no coprocessor.
--- Msg V3.2
* Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
* Tossed by SFToss v1.00b on 92/04/17 09:42:17
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-15-92 18:06:49
From Dj Murdoch
To Ford Crews
Subject Re: collection out of range errors
FC> Special routine exit message: ure Stack Shows: 17AC:0598
What was all that about?
--- Msg V3.2
* Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
* Tossed by SFToss v1.00b on 92/04/17 09:42:17
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-15-92 18:09:57
From Dj Murdoch
To Doug Gale
Subject Re: Exit?
DG> I am not a Pascal programmer, but I do know (or am
DG> learning) the contruction of yhe loops. Where would the
DG> program go to in a proceedure like this:
DG> if abcde=5 then
DG> begin
if varx=0 then
begin
variab=10
exit;
end;
DG> cdefg=10;
Would go here after the exit,
end;
DG> Or HERE
It is the same as a jump to the last "end" in the procedure/function/program:
it exits the current one. That might be the last one you showed, or it might
be even further down.
--- Msg V3.2
* Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
* Tossed by SFToss v1.00b on 92/04/17 09:42:17
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-16-92 07:45:34
From Dj Murdoch
To Matt Schuttloffel
Subject Re: Delay Patch
> -!- MajikToss v0.07m
MS> As a read through the echo, it seems that a lot of people
MS> are using this. Who is it written by? Where can I pick
MS> up a copy? As I am writing my own tosser, I would like to
MS> have something to look at for ideas of other features.
Since I didn't see a smiley, I'll assume you were serious. The reason it
looks like so many people are using MajikToss, is because someone at 1:3601/14.2
is using it and just dumped a huge pile of dups into the echo. It's a buggy
piece of software which is only used by careless idiots. Don't touch it.
--- Msg V3.2
* Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
* Tossed by SFToss v1.00b on 92/04/17 09:42:17
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-16-92 07:49:21
From Dj Murdoch
To Bill Auclair
Subject Re: MOVEing files vs. copy/delete
BA> Recently, someone mentioned a way to re-assign a file to
BA> another directory at the DOS level, *without* having to
BA> copy and delete. This sounds like a much faster method,
BA> although I suspect it is limited to copying within the
BA> same HD partition. Would anyone care to elaborate on how this is done?
It's very simple: the rename file dos service used by TP's Rename procedure
works better than the DOS RENAME command. It lets you change the directory
of a file, resulting in a very quick move.
As you guessed, there are several restrictions:
- the new directory has to already exist.
- you can use the Rename method to rename a directory under the same
parent, but you can't move it to another branch of your directory tree.
- the new directory has to be on the same logical disk (i.e. A:, B:, etc.)
as the original one.
--- Msg V3.2
* Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
* Tossed by SFToss v1.00b on 92/04/17 09:42:17
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-17-92 07:56:53
From Trevor Carlsen
To Alf Katz
Subject OPRO V1.12
AK> In a message to ben Somebody, you mentioned that you
AK> had Opro V1.12.
AK> I have version 1.10 and use it A LOT. Any idea about what
AK> changes have been made since 1.10? Specifically, I have
AK> encountered a bug which hangs the system if you execute an
AK> external program with the mouse enabled. I've had to send
AK> out a couple of applications without mouse support because
AK> of this.
I believe the latest version is 1.14.
If you are having problems, what did Turbo Power say when you approached them
for support? Or didn't you? And if not, why not? Their support on that sort
of thing is brilliant. Mmmmm...
If you do have a genuine bug they will give you a fix and your next upgrade
is free. (I think that is how they work still). In any event an upgrade is
only $20.00 - it would be false economy not to get that if you are having
problems. Terry Hughes from Turbo Power frequents this echo so address your
query to him.
TeeCee
--- TC-ED v2.01
* Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
* Tossed by SFToss v1.00b on 92/04/18 07:52:55
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-17-92 08:08:57
From Trevor Carlsen
To AKIBA GREEN
Subject Re: Vision BBS Source
AG> Wrongo...LSD is derived from Forum-PC, but is well over 75%
AG> entirely it's own..if you've seen versions of the source,
AG> you'd know what I meant..even the 1.06 lsd is over 60% it's
AG> own...We give Credit where credit is do...I have the
AG> forum-pc source and it is a hell of a lot shittier than the
AG> LSD...Ken Duda(if that's his name) couldn't sue Ken Sallot,
AG> cause I am sure Ken got the source off a 100% pd BBS and
AG> that means it was released PD. Anyways, I belive Ken Sallot
AG> gives credit back to the original Forum-PC..if you rat on
AG> Ken though, you've got to rat on:ViSiON/ViSiON-X,
AG> Revelation, Oblivion/2, and over 12 others...
Either take this to netmail, where it should be, or drop the thread. You
have been warned for the last time.
Trevor Carlsen
Moderator.
--- TC-ED v2.01
* Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
* Tossed by SFToss v1.00b on 92/04/18 07:52:55
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-17-92 08:16:36
From Trevor Carlsen
To Aaron Marasco
Subject Help Needed.
AM> { Fancy hi-bit character signature ego-trip deleted }
AM> [Tell me what you think...]
Hi-bit characters are illegal in this echo. Please do not use them again.
Fancy multi-line signatures are very much frowned upon in international echos
due to the extra cost they add to ISD tolls. Please consider that in future.
Trevor Carlsen
Moderator.
--- TC-ED v2.01
* Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
* Tossed by SFToss v1.00b on 92/04/18 07:52:55
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-17-92 08:36:20
From Trevor Carlsen
To Steve Hodges
Subject Encryption
TC>without knowing the key in advance is impossible. The method is
TC>known as the "one time pad" and is universally recognised as the
TC>only proveably unbreakable encyphering method known. Knowing the
TC>encryption/decryption algorithm is of no help whatsoever.
SH> Unfortunatly Trevor this is not always true. If the
SH> "hacker" has some idea of what the cleartext or the key was,
SH> then this knowlege can be used to obtain the rest.
What you say is true if the key is non-random. However any file produced
randomly and used only once as a key makes the method 100% secure.
TeeCee
--- TC-ED v2.01
* Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
* Tossed by SFToss v1.00b on 92/04/18 07:52:55
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-17-92 08:24:39
From Trevor Carlsen
To Kevin O'Donnell
Subject READLN and READ
KO> I tried your idea and it did not work. The second execution of the
KO> below function does not wait for the user to enter anything, just
KO> skips over the READ as if it were not there.
KO> I have doubts now that it is a CR still in the keyboard buffer because
KO> I put 7 of these functions back to back and still, only the first
KO> executed as planned, the rest were skipped.
Kevin my comments were made because you had stated that you had tried it with
a readln rather than the read. Without a readln that will produce exactly
the symtoms you describe. This is fully described in the Library reference
(p108-109).
KO> Could I see an example of the one you use?
I just changed the read to readln. But you said you had tried that. I tried
it again with a readln and it works perfectly.
TeeCee
--- TC-ED v2.01
* Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
* Tossed by SFToss v1.00b on 92/04/18 07:52:55
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-17-92 08:54:19
From Trevor Carlsen
To Matt Schuttloffel
Subject Fast Disk IO
MS> Does anyone have any code for fast disk I/O routines in inline code or
MS> assembler? It would be nice if it could be used on typed (especially
MS> needed), untyped (would be nice), and text (not really THAT
MS> necessary). Output is needed as well as input. Seeks would be nice as
MS> well.
No significant improvement will be noticed by coding disk I/O routines into
assembler or inline code. Is that what you were seeking or was there another
reason?
TeeCee
--- TC-ED v2.01
* Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
* Tossed by SFToss v1.00b on 92/04/18 07:52:55
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-17-92 09:45:04
From Trevor Carlsen
To Ken Burrows
Subject Help Needed with TP arrays
BB> Is there any way to "re-dimension" an array once the program
BB> has started running?
KB> Not that I know of. When dealing with unknow number of elements, you
KB> may be better of with linked lists. They are somewhat simmilar to
KB> arrays, in that they are built of elements, but they can grow
KB> dynamicly.
KB> ...
KB> The latest issue of PcTechniques has a nice writeup on linked lists.
KB> It's source examples are in that dreaded C stuff, but the concepts in
KB> the article are simmilar. I'd be more that happy to give you a hand
KB> with linked lists if you want. (I love em!!!)
There is no doubt that linked lists have their uses. However using them as
a replacement for an array is not one of them. The reason is of course that
a linked list cannot be accessed randomly.
TP can use a pseudo dynamic array - I won't post the code again, as no doubt
you have seen it by now, and this is undoubtedly the way to go when the size
of an array is unknown at compile time and known at run time. If the size
is unknown at runtime then a linked list that can be converted to a dynamic
array is one way to go.
In my experience there are many programmers who use linked lists when an alterna
ive type of structure would be a better way to do things.
TeeCee
--- TC-ED v2.01
* Origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
* Tossed by SFToss v1.00b on 92/04/18 07:52:55
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-17-92 11:04:23
From Dj Murdoch
To John Giesbrecht
Subject Re: Procedure start-up code
JG> Indeed. (In Borland Pascal, perhaps?) But in the
JG> meantime, Dj Murdoch's DUMPPROG is a *very* convenient way
JG> to get a code listing. By simply redirecting its output
JG> (to a .LST file, for example), you can get in one fell
JG> swoop what would take countless pane dumps in Turbo
JG> Debugger. It's very well done (Thanks, Dj!). I don't
JG> know how widely it's been distributed; if you are
JG> interested, and have trouble finding it, let me know.
I sent it out on PDN Pascal, so if you know a node that gets that (e.g. my
bossnode, 1:221/177), it's there. I'm planning an update sometime (maybe
a month or so). The planned enhancements are:
- resolving numeric addresses as symbolic names
- 386/486 opcode display
- maybe: the ability to read the debug info from the .EXE, rather than
reading a .MAP file.
--- Msg V3.2
* Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
* Tossed by SFToss v1.00b on 92/04/18 12:45:20
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-17-92 11:08:36
From Dj Murdoch
To Jeff Sheets
Subject Re: Fast video (was: thanks)
JS> procedure PutPixel(var x,y : word; c : byte);
JS> var
JS> cc : word;
JS> begin
JS> cc := x + y * 320;
JS> mem[$A000:cc] := c;
JS> end;
I'd recode this one in inline assembler, but if you wanted it in Pascal, it
would be quite a bit faster like this:
procedure PutPixel(x,y : word; c:byte);
begin
mem[$A000:x + y*320] := c
end;
The changes are to pass x and y by value (this is both faster, and more flexible
, and to skip storing the intermediate result cc to memory. I think you'll
also end up with a simpler stack frame, since there are no locals.
Here's my attempt at an inline version of it, which would certainly be faster,
but might not work. Use at your own risk!
procedure PutPixel(x,y:word; c: byte); Inline(
$55/ { push bp}
$89/$E5/ { mov bp,sp}
$8B/$46/$04/ { mov ax,[bp+4] ; ax := y}
$B1/$06/ { mov cl,6}
$D3/$E0/ { shl ax,cl}
$89/$C3/ { mov bx,ax ; ax := y*64}
$D1/$E3/ { shl bx,1}
$D1/$E3/ { shl bx,1}
$01/$C3/ { add bx,ax ; bx := y*320}
$03/$5E/$06/ { add bx,[bp+6] ; bx := x+y*320}
$B8/$00/$A0/ { mov ax,$a000}
$8E/$C0/ { mov es,ax}
$8A/$46/$02/ { mov al,[bp+2] ; al := c}
$26/$88/$07/ { es: mov byte ptr [bx],al ; mem[$a000:x + y*320] := c}
$5D/ { pop bp}
$83/$C4/$06); { add sp,6}
JS> BTW - I saw the term Wheel used with TurboVision. What
JS> does it mean? Thanks in advance.
I don't think anything special. If I remember the reference, it was something
like "inherit the wheel" - it's just supposed to be a joke reference to the
old saying, "don't reinvent the wheel".
--- Msg V3.2
* Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
* Tossed by SFToss v1.00b on 92/04/18 12:45:20
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-17-92 11:33:56
From Dj Murdoch
To Stephane Michaud
Subject Re: Procedures...
DM>Yes, it's possible. Look for implementations of
SM> SetJump/LongJump (the C nam
DM>for this) or Catch/Throw (the LISP name). There's one in Turbo/Object
DM>Professional, for instance. The idea is that you have
SM> a function called
DM>SetJump, which saves some state information in a record. Then LongJump
DM>restores the state information and you return from
SM> SetJump *again*, but with
DM>different return value.
SM> Is it possible to do it with Turbo Pascal 6.0 (Not
SM> professional) ???.
Yes. TP 6.0 and TP 6.0 Professional are exactly the same language. I'd recomme
d buying Object Professional (a third party library from TurboPower), but
you can probably find a PD implementation if you look around enough.
--- Msg V3.2
* Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
* Tossed by SFToss v1.00b on 92/04/18 12:45:21
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-17-92 11:36:21
From Dj Murdoch
To Steve Gabrilowitz
Subject Re: Delay Patch
SG> One of us is missing something, here's a code segment that
SG> I haven't tested on different machines, but I don't see
SG> why it shouldn't produce consistant results on any machine
SG> and I wouldn't consider it particularly fancy ;-)
{ Method based on watching the BIOS timer tick deleted }
SG> I have timed this under various system loads and it
SG> appears to perform consistantly, unlike the Crt.Delay
SG> which counts on the calibration it does in its
SG> initialization remaining accurate. Of course, it does
SG> have the disadvantage of inherantly being off by an
SG> average of 1/36 seconds but the nice thing about it is
SG> that the variance will be a constant rather than dependant
SG> on the length of the delay.
I think your method is best if 1/18 sec accuracy is all you need, but the
original TP Delay is much more accurate (when it's working). Yours, for instanc
, will badly mess up
Delay(1); { Delay for 1 ms }
whereas Turbo's will do pretty well on most machines.
--- Msg V3.2
* Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
* Tossed by SFToss v1.00b on 92/04/18 12:45:21
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-17-92 11:43:30
From Dj Murdoch
To Matt Schuttloffel
Subject Re: Fast Disk IO
MS> Does anyone have any code for fast disk I/O routines in
MS> inline code or assembler? It would be nice if it could be
MS> used on typed (especially needed), untyped (would be
MS> nice), and text (not really THAT necessary). Output is
MS> needed as well as input. Seeks would be nice as well.
MS> Tall order ... but who knows what's out there?
Use streams. If you set a large buffer in a TBufStream, it goes pretty fast.
You can do the same with SetTextBuffer for a text file, or use my streams
unit (STREAMS11.ZIP, available on PDN Pascal nodes, e.g. 1:221/177, 1-519-578-
9314,9600,HST,V42b) to take advantage of the stream buffering if you don't
want to manage the allocation/deallocation of the buffer yourself.
--- Msg V3.2
* Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
* Tossed by SFToss v1.00b on 92/04/18 12:45:21
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Conference 4
Date 04-17-92 11:47:33
From Dj Murdoch
To Alf Katz
Subject Re: OPRO V1.12
AK> G'day,
AK> In a message to ben Somebody, you mentioned that
AK> you had Opro V1.12.
AK> I have version 1.10 and use it A LOT. Any idea about what
AK> changes have been made since 1.10? Specifically, I have
AK> encountered a bug which hangs the system if you execute an
AK> external program with the mouse enabled. I've had to send
AK> out a couple of applications without mouse support because of this.
I'd guess you haven't reset the mouse before the shell (if you don't, your
program will still be used to handle mouse events), but maybe there really
is a bug. It sounds as though you haven't told TurboPower about it, though.
Why wouldn't you? Usually you get a bug fix for a reproducible bug in a
day or two, and if they can't find a simple fix, you usually get a free update
to the next version (which *always* fixes any bugs I've found).
--- Msg V3.2
* Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
* Tossed by SFToss v1.00b on 92/04/18 12:45:21